Hibernate একটি শক্তিশালী ORM টুল যা ডেটাবেস অপারেশনে পারফরম্যান্স উন্নত করার জন্য ক্যাশিং মেকানিজম সরবরাহ করে। Hibernate এ ক্যাশিং দুটি স্তরে কাজ করে:
- First Level Cache: প্রতিটি সেশনের জন্য ডিফল্টভাবে সক্রিয় থাকে।
- Second Level Cache: পুরো অ্যাপ্লিকেশনের জন্য শেয়ারযোগ্য ক্যাশ মেকানিজম।
- Query Cache: Second Level Cache এর উপর ভিত্তি করে নির্দিষ্ট কাস্টম ক্যাশিং।
Hibernate Second Level Cache
Second Level Cache ডেটা সঞ্চালনে একটি শেয়ারযোগ্য ক্যাশ ব্যবস্থাপনা করে যা একাধিক সেশনের জন্য ব্যবহার করা যায়। এটি ডেটাবেসে পুনরাবৃত্তি অপারেশন কমিয়ে অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে।
প্রতিস্থাপনযোগ্য ক্যাশ প্রোভাইডার:
- Ehcache
- Infinispan
- Redis
- Caffeine
Second Level Cache কনফিগারেশন
Maven ডিপেন্ডেন্সি
Ehcache প্রোভাইডার ব্যবহার করে Second Level Cache কনফিগার করার জন্য Maven ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.6.15.Final</version>
</dependency>
Hibernate Configuration
application.properties ফাইলে Second Level Cache সক্রিয় করুন:
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
spring.jpa.properties.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider
Entity-Level Configuration
@Cache অ্যানোটেশন ব্যবহার করে Second Level Cache কনফিগার করা হয়:
import jakarta.persistence.*;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "price")
private Double price;
// Getters and Setters
}
CacheConcurrencyStrategy Options:
READ_ONLY: ডেটা শুধুমাত্র পড়ার জন্য।NONSTRICT_READ_WRITE: অপ্রচলিত ডেটা আপডেট করার অনুমতি।READ_WRITE: পড়া এবং লেখা উভয়ের জন্য সঠিক সমন্বয়।TRANSACTIONAL: সম্পূর্ণ ট্রানজ্যাকশনাল কনসিস্টেন্সি।
Query Cache
Query Cache একটি অতিরিক্ত ক্যাশিং মেকানিজম যা Hibernate এর HQL বা Criteria API এর জন্য ব্যবহৃত হয়। এটি সেকেন্ড লেভেল ক্যাশের ওপর নির্ভরশীল।
Query Cache কনফিগারেশন
Query Cache সক্রিয়করণ
application.properties ফাইলে Query Cache সক্রিয় করুন:
spring.jpa.properties.hibernate.cache.use_query_cache=true
Query Cache ব্যবহার
Query Cache ব্যবহার করতে হলে HQL বা Criteria Query তৈরি করতে হবে এবং সেটি ক্যাশ সক্ষম করতে হবে।
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.springframework.stereotype.Repository;
@Repository
public class ProductRepository {
@Autowired
private Session session;
public List<Product> getCachedProducts() {
Query<Product> query = session.createQuery("from Product", Product.class);
query.setCacheable(true); // Enable query caching
return query.list();
}
}
উদাহরণ: Second Level এবং Query Cache কার্যপ্রবাহ
ProductService ক্লাস
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public List<Product> getProducts() {
return productRepository.getCachedProducts();
}
}
Controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping
public List<Product> getAllProducts() {
return productService.getProducts();
}
}
Hibernate Second Level Cache এবং Query Cache এর সুবিধা
| ক্যাশিং প্রকার | সুবিধা |
|---|---|
| Second Level Cache | ডেটাবেস হিট কমিয়ে দ্রুত ডেটা রিট্রাইভ করে। |
| Query Cache | বারবার এক্সিকিউট করা কুয়েরির ফলাফল ক্যাশ করে। |
Hibernate Second Level এবং Query Cache ব্যবহার করে অ্যাপ্লিকেশনের কার্যক্ষমতা এবং পারফরম্যান্স অনেকাংশে বৃদ্ধি করা সম্ভব।
Read more